// #ifndef __INTF_H__
// #define __INTF_H__

// #include "Marcos.h"
// #include "Protocol.h"
// #include "Transmiter.h"

// // using tpDNOriginEncoderStruct = struct{

// // int ex = 0; // 龙门架x编码器值
// // int ey = 0; // 龙门架y编码器值
// // int ez = 0; // 龙门架z编码器值

// // int erx = 0; // 关节电机绕x轴的编码器值
// // int erz = 0; // 关节电机绕z轴的编码器值
// // int ery = 0; // 关节电机绕y轴的编码器值,此值保留，默认为0

// // };

// // using tpDNPositionStruct = struct{

// // float x = 0; // 龙门架x位置
// // float y = 0; // 龙门架y位置
// // float z = 0; // 龙门架z位置

// // float rx = 0; // 关节电机绕x轴的旋转角度
// // float rz = 0; // 关节电机绕z轴的旋转角度
// // float ry = 0; // 关节电机绕y轴的旋转角度,此值保留，默认为0

// // };


// // using tpDNRouteStruct = struct{

// // tpDNPositionStruct pos; // 当前位置

// // float vx = 0; //龙门架 x速度
// // float vy = 0; //龙门架 y速度
// // float vz = 0; //龙门架 z速度

// // float vrx = 0; //关节电机绕 x速度
// // float vry = 0; //关节电机绕 y速度,此值保留，默认为0
// // float vrz = 0; //关节电机绕 z速度

// // float ax = 0; //龙门架 x的加速度
// // float ay = 0; //龙门架 y的加速度
// // float az = 0; //龙门架 z的加速度

// // float arx = 0; //关节电机绕 x轴的加速度
// // float arz = 0; //关节电机绕 z轴的加速度
// // float ary = 0; //关节电机绕 y轴的加速度，此值保留，默认为0

// // };


// // enum class TP_DN_STATUS_CODE: uint8_t 
// // {

// //     TP_DN_STATUS_SUCCES = 0,   //心跳包

// // };



// class TP_Interface{  //一个手法动作 对应一个TaskPoints对象  （包括其中穴位位置，例如：回旋只有一个，往复有多个等等）

// public:

//     TP_Interface(){};
//     ~TP_Interface(){};

//     int TP_DN_Init();  /* 接口初始化     */

//     bool TP_Is_Connected();   /* 是否和控制板卡连接上 */

//    /**
//     * 功能：设置设备的位置，格式1（位置+速度），格式2（等时间间隔的位置+等间隔的时
//     间），两种格式都可以运用
//     * 参数：pos_routes运动到指定位置路径列表， pos_interval等间隔的时间（默认值
//     10ms）；路径列表里面的速度值=-1时认为是按格式2下发的路径
//             * 返回值：TP_DN_STATUS_SUCCES表示成功，其它表示失败
//     * 注：此函数在设备到达指定位置后，才返回
//     */
//     int TP_DN_SetPosition(std::vector<tpDNRouteStruct> const & pos_routes, int pos_interval);

//     /**
//     * 功能：复位设备，格式1（位置+速度），格式2（等时间间隔的位置+等间隔的时间），两种
//     格式都可以运用
//     * 参数：res_routes复位路径列表，res_interval等间隔的时间（默认值10ms）；路径列表
//     里面的速度值=-1时认为是按格式2下发的路径
//     * 返回值：TP_DN_STATUS_SUCCES表示成功，其它表示失败
//     * 注：此函数在设备完全复位之后，才返回
//     */
//     int TP_DN_Reset(std::vector<tpDNRouteStruct> const & res_routes, int res_interval);

//     /**
//     * 功能：设置电机的移动速度，或者旋转角速度
//     * 参数：axis表示哪个电机，0,1,2分别代表x,y,z的龙门架电机，此时v表示水平速度
//     * 3，4，5表示绕x,z,y转旋转的角度电机，此时v表示角速度，绕y轴旋转为保留值
//     * 返回值：TP_DN_STATUS_SUCCES表示成功，其它表示失败
//     */
//     int TP_DN_SetDefaultSpeed(int axis, float v);


//     /**
//     * 功能：设置路径规划，格式1（位置+速度），格式2（等时间间隔的位置+等间隔的时间），
//     两种格式都可以运用
//     * 参数：routes所有的路径列表，interval等间隔的时间（默认值10ms）；路径列表里面的速
//     度值=-1时认为是按格式2下发的路径
//     * 返回值：TP_DN_STATUS_SUCCES表示成功，其它表示失败
//     */
//     int TP_DN_SetRoutes(std::vector<tpDNRouteStruct> const & routes, int interval);




//     /**
//     * 功能：按照已经设置的路径执行移动
//     * 参数：trigger_delay延迟触发数，假如trigger_delay=50，则开发板收到50个trigger之
//     后才开始执行路径
//     * 返回值：TP_DN_STATUS_SUCCES表示成功，其它表示失败
//     * 注：此函数在执行完所有路径之后，才返回
//     */
//     int TP_DN_StartRoutes(int trigger_delay);



//     /**
//     * 功能:设置系统日志
//     * 参数：0表示不打印日志，1表示简单打印日志，2表示详细日志。默认值为1
//     * 返回值：TP_DN_STATUS_SUCCES表示成功，其它表示失败
//     * 注：需要规定日志的路径及名称，EXE所有路径的父目录下的Log文件夹，
//     * TP_DN_Log_当前日期时间.txt。
//     */
//     int TP_DN_SetDebugLog(int level);


//     /**
//     * 功能：获取SDK版本信息
//     * 参数：std::string
//     * 返回值：TP_DN_STATUS_SUCCES表示成功，其它表示失败
//     */
//     int TP_DN_GetVersion(std::string & info);

//     /**
//     * 功能：获取设备的位置状态信息
//     * 参数：tpDNPositionStruct
//     * 返回值：TP_DN_STATUS_SUCCES表示成功，其它表示失败
//     */
//     int TP_DN_GetPosition(tpDNPositionStruct & pos);


//     /**
//     * 功能：获取各个电机的水平移动速度或者旋转角速度
//     * 参数：axis表示哪个电机，0,1,2分别代表x,y,z的龙门架电机，此时v表示水平速度
//     * 3，4，5表示绕x,z,y转旋转的角度电机，此时v表示角速度，绕y轴旋转为保留值为0
//     * 返回值：TP_DN_STATUS_SUCCES表示成功，其它表示失败
//     */
//     int TP_DN_GetDefaultSpeed(int axis, float & v);


//     /**
//     * 功能：获取当前路径信息
//     * 参数：index当前所执行的点数，route此时路径信息
//     * 返回值：TP_DN_STATUS_SUCCES表示成功，其它表示失败
//     */
//     int TP_DN_GetCurrentRoute(int & index, tpDNRouteStruct & route);


//     /**
//     * 功能：开发板收到每一个trigger之后，主动给上位机上传当前信息（得确认：从 接收触发
//     到 数据打包开始上传 之间的时间间隔<1ms）
//     * 参数：total总点数，index当前执行的点，trigger_number开发板收到的trigger数，
//     route路径信息（当前实际位置及速度）
//     * 返回值：无
//     */
//     void TP_DN_Route_Callback(int total, int index, int trigger_number, tpDNRouteStruct route );


//     /**
//     * 功能：单独控制每个电机的运动，电机以默认速度运动
//     * 参数：axis表示哪个电机，0,1,2分别代表x,y,z的龙门架电机，此时distance表示直线位
//     移量（相对于当前位置）
//     * 3，4，5表示绕x,z,y转旋转的角度电机，此时distance表示旋转的角度，绕y轴旋转
//     为保留值为0
//     * speed表示运动速度或者角速度
//     * 返回值：TP_DN_STATUS_SUCCES表示成功，其它表示失败
//     * 注：此函数在执行完运动后，才返回
//     */
//     int TP_DN_SingleMove(int axis,float distance,float speed);


//     /**
//     * 功能：设置当前位置为坐标系原点，或者设置坐标原点的各个轴的绝对值编码器的值
//     * 参数：index=0时，设置当前位置为坐标原点
//     index=1时，设置设置坐标原点的各个轴的绝对值编码器的值
//     * 返回值：TP_DN_STATUS_SUCCES表示成功，其它表示失败
//     */
//     int TP_DN_SetOrigin(int index, tpDNOriginEncoderStruct & encoder);


//     /**
//     * 功能：设置坐标系原点的各个轴的绝对值编码器的值
//     * 参数：tpDNOriginEncoderStruct
//     * 返回值：TP_DN_STATUS_SUCCES表示成功，其它表示失败
//     */
//     int TP_DN_GetOriginEncoder(tpDNOriginEncoderStruct & encoder);


//     // // 通过右值引用方式添加 MethodPts_T 对象
//     // // void Add(NS_ARM::ARM_MOVE_TYPE type,double x,double y,double z);
//     // void Add(NS_ARM::CMD_Method type,double x,double y,double z);
    

//     // // 索引运算符重载函数
//     // std::shared_ptr<NS_ARM::MethodPts_T> operator[](size_t index) 
//     // {
//     //     if (index >= pt_infos.size()) 
//     //     {
//     //         throw std::out_of_range("Err in [TaskPoints] : Index out of range");
//     //     }
//     //     return pt_infos.at(index);
//     // }

//     // //获取
//     // const std::shared_ptr<NS_ARM::MethodPts_T> operator[](size_t index) const 
//     // {
//     //     if (index >= pt_infos.size()) 
//     //     {
//     //         throw std::out_of_range("Err in [TaskPoints] : Index out of range");
//     //     }
//     //     return pt_infos.at(index);
//     // }

//     // //获取该手法点位信息 中 包含的点位数量
//     // const size_t Get_Num_Of_Pt(void) const
//     // {
//     //     return pt_infos.size();
//     // }

// private:

//     // std::vector<std::shared_ptr<NS_ARM::MethodPts_T>> pt_infos;  /*可能包含一个MethodPts_T，也可能包含多个MethodPts_T，如果是回旋，雀啄 就是一个，如果是往复，循经就是多个*/
    
// };

// // }


// #endif





